home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / internet / yam_i_dodatki / pgpwithyam / source / selectkey.e next >
Text File  |  1997-06-18  |  6KB  |  274 lines

  1. /**********************************************************\
  2.  * Filter pubkeys from pgp output and lets you select one *
  3.  * V1.0 by Michael Praschl                                *
  4. \**********************************************************/
  5.  
  6. OPT PREPROCESS
  7.  
  8. -> PROC Module
  9. MODULE 'tools/boopsi'
  10. MODULE 'muimaster', 'libraries/mui'
  11. MODULE 'utility/tagitem', 'utility/hooks'
  12. MODULE 'intuition/classes', 'intuition/classusr'
  13. MODULE 'libraries/gadtools'
  14. MODULE 'tools/installhook'
  15. -> ENDPROC
  16. -> PROC #defines
  17.  
  18. -> ENDPROC
  19. -> PROC Raises
  20. RAISE "ARGS" IF ReadArgs()=NIL,
  21.       "FILE" IF Open()=NIL
  22. -> ENDPROC
  23. -> PROC Objekte
  24. OBJECT rdargs
  25.   readargs,filename,public,
  26.   args[2]: ARRAY OF LONG
  27. ENDOBJECT
  28.  
  29. OBJECT keylist
  30.   first: PTR TO keyentry
  31. ENDOBJECT
  32.  
  33. OBJECT keyentry
  34.   next: PTR TO keyentry,
  35.   str:  PTR TO CHAR
  36. ENDOBJECT
  37.  
  38. OBJECT file
  39.   fh,
  40.   line: PTR TO CHAR
  41. ENDOBJECT
  42.  
  43. -> ENDPROC
  44. -> PROC Konstante
  45. CONST KICKVERSION=39
  46. -> ENDPROC
  47. -> PROC Variable
  48. DEF app,window,listview,list,
  49.     doublehook
  50. -> ENDPROC
  51. -> PROC Instanzen
  52. DEF rdargs:  PTR TO rdargs,
  53.     keylist: PTR TO keylist,
  54.     inf:     PTR TO file
  55. -> ENDPROC
  56.  
  57. /*
  58. ** Methoden
  59. */
  60. PROC read(str) OF rdargs
  61.   self.readargs:=ReadArgs(str,self.args,NIL)
  62.   self.filename:=self.args[0]
  63.   self.public:=IF self.args[1]=NIL THEN 'pub' ELSE self.args[1]
  64. ENDPROC
  65. PROC end() OF rdargs
  66.   IF self.readargs THEN FreeArgs(self.readargs)
  67. ENDPROC
  68. CHAR '$VER: SelectKey 1.0 (18.6.97) by Michael Praschl'
  69.  
  70. PROC add(str) OF keylist
  71.   DEF ke: PTR TO keyentry
  72.  
  73.   ke:=NewR(SIZEOF keyentry)
  74.  
  75.   ke.str:=str
  76.   ke.next:=self.first
  77.   self.first:=ke
  78.  
  79. ENDPROC
  80. PROC put2list(list) OF keylist
  81.   DEF ke: PTR TO keyentry
  82.  
  83.   ke:=self.first
  84.   WHILE ke
  85.     domethod(list,[MUIM_List_InsertSingle,ke.str,MUIV_List_Insert_Top])
  86.  
  87.     ke:=ke.next
  88.   ENDWHILE
  89.  
  90. ENDPROC
  91. PROC end() OF keylist
  92.   DEF ke: PTR TO keyentry,
  93.       h
  94.  
  95.   ke:=self.first
  96.   WHILE ke
  97.     IF ke.str THEN DisposeLink(ke.str)
  98.     h:=ke
  99.     ke:=ke.next
  100.     Dispose(h)
  101.   ENDWHILE
  102.  
  103. ENDPROC
  104.  
  105. PROC init(name,mode) OF file
  106.   self.line:=String(300)
  107.   IF self.line=NIL THEN Raise("MEM")
  108.   self.fh:=Open(name,mode)
  109. ENDPROC
  110. PROC readln() OF file
  111.   DEF ok
  112.   ok:=Fgets(self.fh,self.line,300)
  113. ENDPROC IF ok THEN self.line ELSE FALSE
  114. PROC getkeylines(list: PTR TO keylist,public) OF file
  115.   DEF keys: PTR TO CHAR,
  116.       ok
  117.  
  118.   REPEAT
  119.     ok:=self.readln()
  120.     IF StrCmp(public,self.line,3)
  121.       IF (keys:=String(300))=NIL THEN Raise("MEM")
  122.       self.getuser(keys)
  123.       self.getid(keys)
  124.       list.add(keys)
  125.     ENDIF
  126.   UNTIL ok=FALSE
  127. ENDPROC
  128. PROC getid(str: PTR TO CHAR) OF file
  129.   DEF pos
  130.   IF (pos:=InStr(self.line,'/'))>=0
  131.     StrAdd(str,'0x')
  132.     StrAdd(str,self.line+pos+1,8)
  133.   ENDIF
  134. ENDPROC
  135. PROC getuser(str: PTR TO CHAR) OF file
  136.   DEF pos=0,lastwas=FALSE,anz=0      /* lastwas von TRUE auf FALSE -> anz++ */
  137.  
  138.   REPEAT
  139.     IF self.line[pos]=" "
  140.       lastwas:=TRUE
  141.     ELSE
  142.       IF lastwas THEN anz++
  143.       lastwas:=FALSE
  144.     ENDIF
  145.     pos++
  146.   UNTIL (anz=3)
  147.  
  148.   StrCopy(str,self.line+pos-1,StrLen(self.line+pos))  /* Trick */
  149.   /*         ^ Start                ^ ein Zeichen weniger wegen \n */
  150.   StrAdd(str,' ')
  151.  
  152. ENDPROC
  153. PROC end() OF file
  154.   IF self.fh THEN Close(self.fh)
  155.   IF self.line THEN DisposeLink(self.line)
  156. ENDPROC
  157.  
  158. /*
  159. ** Prozeduren
  160. */
  161. PROC open_all()
  162.   NEW rdargs
  163.   rdargs.read('FILE/A,PUBLIC')
  164.  
  165.   NEW inf.init(rdargs.filename,OLDFILE)
  166.  
  167.   NEW keylist
  168.  
  169.   inf.getkeylines(keylist,rdargs.public)
  170.  
  171.   END inf
  172.  
  173.   installhook(doublehook,{doublehook_proc})
  174.  
  175.   IF (muimasterbase:=OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))=NIL THEN Raise("MUIL")
  176.  
  177.   app:= ApplicationObject,
  178.     MUIA_Application_Title,'Select a public key',
  179.     MUIA_Application_Version,'$VER: PubKey 1.0 (18.6.97)',
  180.     MUIA_Application_Copyright,' 1997, Michael Praschl',
  181.     MUIA_Application_Author,'Michael Praschl',
  182.     MUIA_Application_Description,'For selecting a public key',
  183.     MUIA_Application_Base,'PUBKEY',
  184.     SubWindow, window:=WindowObject,
  185.       MUIA_Window_Title, 'Select a public key...',
  186.       MUIA_Window_ID   , "MAIN",
  187.       WindowContents, VGroup,
  188.         Child,listview:=ListviewObject,
  189.           MUIA_Listview_MultiSelect,MUIV_Listview_MultiSelect_Default,
  190.           MUIA_Listview_List,list:=ListObject,
  191.             InputListFrame,
  192.             MUIA_List_ConstructHook,MUIV_List_ConstructHook_String,
  193.             MUIA_List_DestructHook,MUIV_List_DestructHook_String,
  194.           End,
  195.         End,
  196.       End,
  197.     End,
  198.   End
  199.   IF app=NIL THEN Raise("APPL")
  200.  
  201.   domethod(window,[MUIM_Notify,MUIA_Window_CloseRequest,MUI_TRUE,
  202.     app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
  203.   domethod(listview,[MUIM_Notify,MUIA_Listview_DoubleClick,MUI_TRUE,
  204.     list,2,MUIM_CallHook,doublehook])
  205.   domethod(listview,[MUIM_Notify,MUIA_Listview_DoubleClick,MUI_TRUE,
  206.     app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
  207.  
  208.   keylist.put2list(list)
  209.  
  210.   set(window,MUIA_Window_Open,MUI_TRUE)
  211. ENDPROC
  212. PROC close_all()
  213.   IF app THEN Mui_DisposeObject(app)
  214.   IF muimasterbase THEN CloseLibrary(muimasterbase)
  215.  
  216.   END keylist
  217.   END rdargs
  218. ENDPROC
  219.  
  220. PROC handle_all()
  221.   DEF signal, running=TRUE, result
  222.  
  223.   WHILE running
  224.      result := domethod(app, [MUIM_Application_Input, {signal} ])
  225.      SELECT result
  226.        CASE MUIV_Application_ReturnID_Quit
  227.          running := FALSE
  228.      ENDSELECT
  229.      IF signal THEN Wait(signal)
  230.   ENDWHILE
  231.  
  232. ENDPROC
  233.  
  234. PROC doublehook_proc(hook,list,data)
  235.   DEF str,enum
  236.  
  237.   enum:=MUIV_List_NextSelected_Start
  238.   REPEAT
  239.     domethod(list,[MUIM_List_NextSelected,{enum}])
  240.     IF (enum<>MUIV_List_NextSelected_End)
  241.       domethod(list,[MUIM_List_GetEntry,enum,{str}])
  242.       WriteF('\s\n',str+(StrLen(str)-10))
  243.     ENDIF
  244.   UNTIL (enum=MUIV_List_NextSelected_End)
  245.  
  246. ENDPROC
  247.  
  248. /*************** Main *************/
  249. PROC main() HANDLE
  250.   IF KickVersion(KICKVERSION)=FALSE THEN Raise("KICK")
  251.   open_all()
  252.   handle_all()
  253. EXCEPT DO
  254.   close_all()
  255.   
  256.   IF exception
  257.     SELECT exception
  258.       CASE "MUIL"
  259.         WriteF('Failed to open \s.\n',MUIMASTER_NAME)
  260.       CASE "APPL"
  261.         WriteF('Failed to create application.\n')
  262.       CASE "KICK"
  263.         WriteF('Kickstart V\d++ required!\n',KICKVERSION)
  264.       CASE "NIL"
  265.         WriteF('NILpointer in line \d\n',exceptioninfo)
  266.       DEFAULT
  267.         WriteF('Exception ')
  268.         Write(stdout,{exception},4)
  269.         WriteF(' raised!\n')
  270.     ENDSELECT
  271.   ENDIF
  272.  
  273. ENDPROC
  274.